package NetWork.UDPDemo001;

import java.io.IOException;
import java.net.DatagramPacket;
import java.net.DatagramSocket;
import java.net.InetAddress;

/**
 * ClassName:UDPDome002
 * Package:NetWork
 * Description:
 *
 * @Author:ZhangXin
 * @Create:2023/3/7-20:20
 * @Version:v1.0
 */
public class ReceiveMessageDome {
    /* UDP 接收数据
     * 1.创建接收端的DatagramSocket对象
     * 2.接受打包好的数据
     * 3.解析数据包
     * 4.释放资源*/
    public static void main(String[] args) throws IOException {

        //创建DatagramSocket对象
        /*细节
         * 在接收的时候,一定要绑定端口
         * 而且绑定的端口一定要跟发送的端口保持一致*/
        DatagramSocket ds = new DatagramSocket(10086);

        //接收数据包
        byte[] bytes = new byte[1024];
        DatagramPacket dp = new DatagramPacket(bytes, bytes.length);
        /*该方法是阻塞的
        * 程序执行到这一步的时候,会在这里死等
        * 等发送端发送消息*/
        ds.receive(dp);
        //解析数据包
        byte[] data = dp.getData();
        int len = dp.getLength();
        InetAddress address = dp.getAddress();
        int port = dp.getPort();
        System.out.println("接收到数据:"+new String(data,0,len));
        System.out.println("该数据是从"+address+"这台电脑中的"+port+"这个端口发出");
        ds.close();
    }
}